package com.neuedu.it.teach.controller;
/*TODO: 完成学生表的增删查改，
   增加
   查的时候，分几种查，一种是获取全部的，还有一个根据user_id 查询
   删除，好像有，写一下吧
   改，好像也有，也写一下
*  */
/**
 * -- 5. 学生个人信息表（仅针对学生用户）
 * DROP TABLE IF EXISTS `student_info`;
 * CREATE TABLE `student_info` (
 *   `student_id` INT NOT NULL AUTO_INCREMENT,
 *   `user_id` INT NOT NULL,                -- 关联用户表中的 user_id（该用户为学生家长）
 *   `full_name` VARCHAR(255) NOT NULL,     -- 学生全名
 *   `gender` ENUM('Male', 'Female') DEFAULT 'Male',  -- 性别
 *   `birthdate` DATE DEFAULT NULL,         -- 出生日期
 *   `grade` VARCHAR(50) DEFAULT NULL,      -- 年级
 *   `school` VARCHAR(255) DEFAULT NULL,    -- 学校名称
 *   `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
 *   PRIMARY KEY (`student_id`),
 *   FOREIGN KEY (`user_id`) REFERENCES `users`(`user_id`) ON DELETE CASCADE
 * ) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;
 * *
 */
import com.neuedu.it.teach.controller.vo.Result;
import com.neuedu.it.teach.entity.StudentInfo;
import com.neuedu.it.teach.entity.User;
import com.neuedu.it.teach.service.StudentInfoService;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;


@RestController
@RequestMapping("/stu")
public class StuController {
    @Autowired
    private StudentInfoService studentInfoService;

    // 添加学生信息
    @PostMapping("/add")//能用
    public Result<Integer> addStudent(@RequestBody StudentInfo studentInfo, HttpServletRequest request) {
        User user = (User) request.getAttribute("user");
        studentInfo.setUserId(user.getId());
        studentInfoService.addStudent(studentInfo);
        return Result.success(studentInfo.getStudentId());
    }

    // 获取所有学生信息
    @GetMapping("/all")//能用
    public Result<List<StudentInfo>> getAllStudents() {
        List<StudentInfo> students = studentInfoService.getAllStudents();
        return Result.success(students);
    }

    // 根据 user_id 查询学生
    @GetMapping("/find")//能用
    public Result<List<StudentInfo>> getStudentsByUserId(HttpServletRequest request) {
        // 从 request 中获取 user 对象
        User user = (User) request.getAttribute("user");
        if (user == null) {
            // 如果没有从请求中获取到用户信息，返回错误
            return Result.custom(401, "未授权，用户信息缺失");
        }

        // 使用获取到的 userId 来查询学生
        List<StudentInfo> students = studentInfoService.getStudentsByUserId(user.getId());
        return Result.success(students);
    }

    // 根据 student_id 查询学生的全部信息
    @GetMapping("/findById/{studentId}")//能用
    public Result<StudentInfo> getStudentById(@PathVariable("studentId") Integer studentId) {
        // 调用服务层根据 studentId 获取学生信息
        StudentInfo student = studentInfoService.getStudentById(studentId);

        if (student == null) {
            // 如果学生信息不存在，返回 404 错误
            return Result.notFound("学生信息未找到");
        }

        // 如果找到学生信息，返回结果
        return Result.success(student);
    }


    // 删除学生（根据 student_id）
    @DeleteMapping("/delete/{studentId}")//能用
    public Result<String> deleteStudent(@PathVariable("studentId") Integer studentId) {
        studentInfoService.deleteStudent(studentId);
        return Result.success("删除成功");
    }

    // 修改学生信息
    @PutMapping("/update")//能用
    public Result<String> updateStudent(@RequestBody StudentInfo studentInfo) {
        studentInfoService.updateStudent(studentInfo);
        return Result.success("修改成功");
    }
}
